﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using Model;
using Util;

namespace DAO
{
    public class ItemPedidoDAO
    {

        private SqlConnection conexaoDB = null;
        private String stringConexao = ConfigurationManager.ConnectionStrings["ControlePedidoDB"].ToString();
        private static ItemPedidoDAO singleton = null;
        private SqlCommand comandoExecutar = null;

        private ItemPedidoDAO() 
        {
            conexaoDB = new SqlConnection(stringConexao);
        }

        public static ItemPedidoDAO getInstance() 
        {
            if (singleton == null) 
            {
                singleton = new ItemPedidoDAO();
            }

            return singleton;
        }

        public void inserir(ItemPedido item) 
        {
            String SQL_INSERT = "INSERT INTO Item_Pedido (id_produto, id_pedido, qtde) VALUES (@produto, @pedido, @qtde)";

            try 
            {
                conexaoDB.Open();

                comandoExecutar = new SqlCommand(SQL_INSERT, conexaoDB);
                comandoExecutar.Parameters.Add(new SqlParameter("@produto", item.Produto.Codigo));
                comandoExecutar.Parameters.Add(new SqlParameter("@pedido", item.Pedido.Codigo));
                comandoExecutar.Parameters.Add(new SqlParameter("@qtde", item.Quantidade));

                comandoExecutar.ExecuteNonQuery();
            }
            catch (Exception cause) 
            {
                throw new Exception("Problemas na inserção do item de pedido: " + cause.Message);
            }
            finally 
            {
                conexaoDB.Close();
            }

        }

        public List<ItemPedidoVO> recuperarProdutosPedido(Pedido pedido) {
            List<ItemPedidoVO> produtos = new List<ItemPedidoVO>();
            String SQL_CONSULTA = "SELECT i.qtde, i.id_produto, p.nome FROM Item_Pedido i INNER JOIN Produto P ON i.id_produto = p.id_produto WHERE i.id_pedido = @id ORDER BY i.id_produto";
            ItemPedidoVO auxiliar = null;
            SqlDataReader resultadoBusca = null;

            try
            {
                conexaoDB.Open();

                comandoExecutar = new SqlCommand(SQL_CONSULTA, conexaoDB);
                comandoExecutar.Parameters.Add(new SqlParameter("@id", pedido.Codigo));

                resultadoBusca = comandoExecutar.ExecuteReader();

                while (resultadoBusca.Read()) 
                {
                    auxiliar = new ItemPedidoVO();

                    auxiliar.Quantidade = int.Parse(resultadoBusca[0].ToString());
                    auxiliar.CodigoProduto = int.Parse(resultadoBusca[1].ToString());
                    auxiliar.NomeProduto = resultadoBusca[2].ToString();

                    produtos.Add(auxiliar);
                }
            }
            catch (Exception cause) 
            {
                throw cause;
            }
            finally
            {
                conexaoDB.Close();
            }

            return produtos;
        }

        public void deletarItensPedido(Pedido pedido) 
        {
            String SQL_DELETE = "DELETE FROM Item_Pedido WHERE id_pedido = @id";

            try
            {
                conexaoDB.Open();

                comandoExecutar = new SqlCommand(SQL_DELETE, conexaoDB);
                comandoExecutar.Parameters.Add(new SqlParameter("@id", pedido.Codigo));

                comandoExecutar.ExecuteNonQuery();
            }catch(Exception cause)
            {
                throw cause;
            }
            finally
            {
                conexaoDB.Close();
            }
        }

    }
}
